<?php # login.php - 9.11
// This page both displays and handles the login form.

// Need the utilities file:
require('includes/utilities.inc.php');

// 创建一个新表单，注意，这里用到了HTML_QuickForm2，需要用执行sudo pear install HTML_QuickForm2安装
// 如果引入失败可以插入这行代码，注意，不同系统路径也不同，OpenSUSE的路径是/usr/share/php5/pear：set_include_path(get_include_path() . PATH_SEPARATOR . '/usr/local/pear/share/pear/');
require('HTML/QuickForm2.php');
$form = new HTML_QuickForm2('loginForm');

// 添加电子邮件地址：
$email = $form->addElement('text', 'email');
$email->setLabel('电子邮件');
$email->addFilter('trim');
$email->addRule('required', '请输入你的电子邮件地址。');
$email->addRule('email', '请输入正确的电子邮件地址。');

// 添加密码字段
$password = $form->addElement('password', 'password');
$password->setLabel('密码');
$password->addFilter('trim');
$password->addRule('required', '请输入密码。');

// 添加提交按钮，注意，这个元素多了一个值
$form->addElement('submit', 'submit', array('value'=>'提交'));

// 检查表单提交的数据：
if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Handle the form submission
    
    // 检验表单数据：
    if ($form->validate()) {
        try {
            // 检查是否匹配数据记录：
            $q = 'SELECT id, userType, username, email FROM users WHERE email=:email AND password=SHA1(:password)';
            $stmt = $pdo->prepare($q);
            $r = $stmt->execute(array(':email' => $email->getValue(), ':password' => $password->getValue()));

            // Try to fetch the results:
            if ($r) {
                $stmt->setFetchMode(PDO::FETCH_CLASS, 'User');
                $user = $stmt->fetch();
            }
        } catch (Exception $e) {
            include('views/error.html');
        }
        
        // 存储$user对象变量并跳转页面：
        if ($user) {
    
            // 将对象变量存到会话中，PHP会自动将它序列化，在读取时会自动反序列化：
            $_SESSION['user'] = $user;
    
            // 跳转到首页:
            header("Location:index.php");
            exit;
    
        }
        
    } // End of form validation IF.
    
} // End of form submission IF.

// 显示登录页面:
$pageTitle = '登录';
include('includes/header.inc.php');
include('views/login.html');        //登录视图文件
include('includes/footer.inc.php');